
using System;
using System.Data.Odbc;
using System.Collections.Generic;
using Gestion_Api.AccesoDatos;
using System.Data.SqlClient;
using System.Data;

namespace Escuela
{
    public class Alumno
    {
        private int _id;
        private string _nombre;
        private string _apellido;
        private string _dni;
        private string _email;
        private string _direccion;
        private string _telefono;
        private string _celular;
        private DateTime _fechaDeNacimiento;
        private DateTime _fechaDeIngreso;
        private bool _activo;

        #region getter and setter
    

        public int id
        {
            get { return _id; }
            set { _id = value; }
        }
        
        public string nombre
        {
            get { return _nombre; }
            set { _nombre = value; }
        }

        public string apellido
        {
            get { return _apellido; }
            set { _apellido = value; }
        }

        public string dni
        {
            get { return _dni; }
            set { _dni = value; }
        }

        public string email
        {
            get { return _email; }
            set { _email = value; }
        }

        public string direccion
        {
            get { return _direccion; }
            set { _direccion = value; }
        }

        public string telefono
        {
            get { return _telefono; }
            set { _telefono = value; }
        }

        public string celular
        {
            get { return _celular; }
            set { _celular = value; }
        }

        public DateTime fechaDeNacimiento
        {
            get { return _fechaDeNacimiento; }
            set { _fechaDeNacimiento = value; }
        }

        public DateTime fechaDeIngreso
        {
            get { return _fechaDeIngreso; }
            set { _fechaDeIngreso = value; }
        }

        public bool activo
        {
            get { return _activo; }
            set { _activo = value; }
        }

        #endregion

        

        /// <summary>
        /// Agrega un pago al alumno
        /// </summary>
        /// <param name="pago">Instancia creada de un pago para asociar al alumno</param>
        public void agregarPago(Pago pago)
        {

        }
        
        public bool updateAlumno(Alumno al)
        {
                AccesoDB ad = new AccesoDB();

                //genero query
                string query = "coop_alumno_Update ";
                query += "'" + al.id + "', ";
                query += "'" + al.activo + "', ";
                query += "'" + al.apellido + "',";
                query += "'" + al.celular + "', ";
                query += "'" + al.direccion + "', ";
                query += "'" + al.dni + "', ";
                query += "'" + al.email + "', ";
                query += "'" + al.fechaDeIngreso.ToString("yyyyMMdd") + "', ";
                query += "'" + al.fechaDeNacimiento.ToString("yyyyMMdd") + "', ";
                query += "'" + al.nombre + "',";
                query += "'" + al.telefono + "'";

                SqlCommand command = new SqlCommand();
                //command.Connection = connection;
                command.CommandText = query;
                command.CommandType = CommandType.Text;

                int resp = ad.ejecQueryResp(command);
                return true;
            

        }

        public bool delAlumno(Alumno al)
        {
            Alumno alumno = this.buscarEnDB(al.dni);
            if (alumno == null || alumno.dni != al.dni)
            {
                return false;
            }
            else
            {
                AccesoDB ad = new AccesoDB();

                //genero query
                string query = "coop_alumno_Delete ";
                query += "'" + al.id + "'";


                SqlCommand command = new SqlCommand();
                //command.Connection = connection;
                command.CommandText = query;
                command.CommandType = CommandType.Text;

                int resp = ad.ejecQueryResp(command);
                return true;
            }

        }

        public void agregarCursable(Cursable cursable)
        {
        }
        
        public void eliminarPagoPendiente(Pago pago)
        {
        }
        
        public void notificacion(float monto, DateTime fechaVencimiento, String observacion)
        {
        }

        public List<PagoAlumno> pagosPendientes()
        {
            //Genero la clase de conexion
            AccesoDB ad = new AccesoDB();
            List<PagoAlumno> pagos = new List<PagoAlumno>();


            string query = "pagos_pendientes_alumno " + this.id;

            SqlCommand command = new SqlCommand();
            command.CommandType = CommandType.Text;
            command.CommandText = query;

            //Ejecuto query y lo cargo en un data reader
            SqlDataReader dr = ad.ExecuteReader(command);

            //recorro data reader
            if (dr.HasRows)
            {
                
                while (dr.Read())
                {
                    PagoAlumno pa = new PagoAlumno();
                    pa.Id = Convert.ToInt32(dr[0]);
                    pa.FechaPago = Convert.ToDateTime(dr[1]);
                    pa.Monto = Convert.ToDecimal(dr[2]);
                    pa.Observacion = dr[3].ToString();
                    pa.Pendiente = Convert.ToBoolean(dr[4]);
                    pa.Alumno = this;
                    pa.FechaDeVencimiento = Convert.ToDateTime(dr[7]);
                    pagos.Add(pa);

                }
                //Cierro el data reader
                dr.Close();

                //devuelvo los pagos pendientes
                return pagos;


            }
            else
            {
                return null;
 
            }
        }


        public int agregarDB(Alumno al)
        {
            //Genero la clase de conexion
            AccesoDB ad = new AccesoDB();

            //genero query
            string query = "coop_alumno_Insert ";
            query += "'" + al.nombre + "', ";
            query += "'" + al.apellido + "', ";
            query += "'" + al.celular + "', ";
            query += "'" + al.direccion + "', ";
            query += "'" + al.dni + "', ";
            query += "'" + al.email + "', ";
            query += "'" + al.fechaDeIngreso.ToString("yyyyMMdd") + "', ";
            query += "'" + al.fechaDeNacimiento.ToString("yyyyMMdd") + "', ";
            query += "'" + al.telefono + "'";
            
            //Ejecuto el query
            //int resp = ad.ejecQuery(query);

            SqlCommand command = new SqlCommand();
            //command.Connection = connection;
            command.CommandText = query;
            command.CommandType = CommandType.Text;

            int resp = ad.ejecQueryResp(command);

            return resp;
   
        }
        
        public Alumno buscarEnDB(string dni)
        {
            
            //Genero la clase de conexion
            AccesoDB ad = new AccesoDB();
            
            string query = "coop_alumno_GetOne '" + dni.Trim().Replace(".","") + "'";
            //Ejecuto query y lo cargo en un data reader
            //SqlDataReader dr = ad.ExecuteReader(query);

            SqlCommand command = new SqlCommand();
            //command.Connection = connection;
            command.CommandText = query;
            command.CommandType = CommandType.Text;

            //Ejecuto query y lo cargo en un data reader
            SqlDataReader dr = ad.ExecuteReader(command);

            //recorro data reader
            if (dr.HasRows)
            {
                Alumno al = new Alumno();
                while (dr.Read())
                {
                    al.id = Convert.ToInt32(dr[0]);
                    al.apellido = dr[2].ToString();
                    al.celular = dr[3].ToString();
                    al.direccion = dr[4].ToString();
                    al.dni = dr[5].ToString();
                    al.email = dr[6].ToString();
                    al.fechaDeIngreso = Convert.ToDateTime(dr[7]);
                    al.fechaDeNacimiento = Convert.ToDateTime(dr[8]);
                    al.nombre = dr[9].ToString();
                    al.telefono = dr[10].ToString();
                }
                
                //Cierro el data reader
                dr.Close();
                return al;
            }
            else
            {
                //no encontre registros en la DB
                return null;
            }
           
        }
    }

}
